const crypto = require('crypto');
/* 
	不可逆MD5算法
	一般用于登录密码的加密
 */

function l(param) {
    console.log(param);
}


//创建一个md5 hash算法
const md5 = crypto.createHash('md5');
md5.update('aa');//添加要转化的值
md5.update('cc');//与前面的要转化的值进行拼接
l(md5.digest('hex'));//打印16进制的密文，

//创建一个sh1 hash算法
const sha1 = crypto.createHash('sha1');
sha1.update('bbbb');
l(sha1.digest('hex'));

//创建一个带秘钥的sha1或者md5算法
const hmac = crypto.createHmac('md5', 'key');
hmac.update('aacc');
l(hmac.digest('hex'));

/* 
	可逆AES 对称加密算法
	一般用于重要数据得存储
 */
// 加密
function aesEncode(src, key) {
	// 加盐
	const iv = Buffer.alloc(0);
	const keyBuffer = crypto.createHash('md5').update(key).digest()
    const cipher = crypto.createCipheriv('AES-128-ECB', keyBuffer, iv);
	return cipher.update(src, 'utf8', 'hex') + cipher.final('hex');
}

// 解密
function aesDecode(sign, key) {
	// 加盐
	const iv = Buffer.alloc(0);
	const keyBuffer = crypto.createHash('md5').update(key).digest()
    const cipher = crypto.createDecipheriv('AES-128-ECB', keyBuffer, iv);
    return cipher.update(sign, 'hex', 'utf8') + cipher.final('utf8');
}

// 测试
var data = '我是一个大傻瓜';
var key = "sadnjnkalw";
console.log("key",key)
console.time("a")
l(aesEncode(data, key));
console.timeEnd("a")
l(aesDecode(aesEncode(data, key), key));